package controller;

import java.util.Date;
import java.util.List;

import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;

import utils.ByteTools;
import utils.Terminal;
import model.Archivo;
import dataBaseOperations.CrudBasic;

public class ArchivoController extends CrudBasic<Archivo> {

	public ArchivoController(Session session) {
		super(session);
	}

	Terminal console = new Terminal("Archivo_Services");

	@Override
	protected Class<Archivo> getClazz() {
		return Archivo.class;
	}

	public int saveArchivo(String serverpath, int tam, String grupo,
			String username) {
		Archivo archivo = new Archivo();
		archivo.setFechaSubida(new Date());
		archivo.setRutaAcceso(serverpath);
		archivo.setTamano(tam);
		archivo.setFkGrupo(grupo);
		archivo.setFkUsuarioAutor(username);
		return persistv2(archivo);
	}

	public int persistv2(Archivo arch) {
		try {
			startOperation();
			session.save(arch);
			if (!tx.wasCommitted())
				tx.commit();
		} catch (HibernateException he) {
			handleException(he);
		}
		return arch.getIdArchivo();
	}

	public List<Archivo> getByGroup(String group) {
		List<Archivo> list = null;
		try {
			startOperation();
			Query query = session.getNamedQuery("Archivo.getByGroup");
			query.setString("group", group);
			list = query.list();
			if (!tx.wasCommitted())
				tx.commit();
		} catch (HibernateException he) {
			handleException(he);
			return null;
		}
		return list;
	}

	public boolean deletex(int idFile) {
		ByteTools tools = new ByteTools();
		Archivo archivo = (Archivo) getByPK(idFile);
		String deleteName = tools.getFileName(archivo.getRutaAcceso());
		archivo.setRutaAcceso("Trash\\" + deleteName);
		return update(archivo);
	}
}
